import path from 'path';
import { cac } from 'cac';
import chalk from 'chalk';
import type { BuildOptions } from './build';
import { createLogger } from './logger';

const cli = cac('seepfly');

// build
cli
  .command('build [root]')
  .option('--base <base>', `[string] 在开发或生产中使用时的基本公共路径`)
  .option('--target <target>', `[string] 打包目标类型 'element' | never`)
  .option('--mode <mode>', `[string] 设置环境模式`)
  .option('--deepfosEnv <deepfosEnv>', `[string] 设置环境域名`)
  .option('--antPrefix <antPrefix>', `[string] ant-design 样式前缀`)
  .option('--sourcemap', `[boolean] 用于构建的输出源映射 (default: false)`)
  .option('--analyze', `[boolean] 用于输出可视化分析 (default: false)`)
  .action(async (root: string, options: Omit<BuildOptions, 'root'>) => {
    const { build } = await import('./build');

    try {
      await build({
        root: root || root ? path.resolve(root) : process.cwd(),
        ...options,
      });
    } catch (e) {
      createLogger('error').error(chalk.red(`构建过程中出错：\n${(e as Error).stack}`));
      process.exit(1);
    }
  });

cli.help();
cli.version(require('../package.json').version);

cli.parse();
